package com.xxl.job.admin.core.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Cookie.Util
 *
 * @author xuxueli 2015-12-12 18:01:06
 */
public class CookieUtil {

  // 默认缓存时间,单位/秒, 2H
  private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
  // 保存路径,根路径
  private static final String COOKIE_PATH = "/";

  /**
   * 保存
   *
   * @param response
   * @param key
   * @param value
   * @param ifRemember
   */
  public static void set(HttpServletResponse response, String key, String value,
      boolean ifRemember) {
    int age = ifRemember ? COOKIE_MAX_AGE : -1;
    set(response, key, value, null, COOKIE_PATH, age, true);
  }

  /**
   * 保存
   *
   * @param response
   * @param key
   * @param value
   * @param maxAge
   */
  private static void set(HttpServletResponse response, String key, String value, String domain,
      String path, int maxAge, boolean isHttpOnly) {
    Cookie cookie = new Cookie(key, value);
    if (domain != null) {
      cookie.setDomain(domain);
    }
    cookie.setPath(path);
    cookie.setMaxAge(maxAge);
    cookie.setHttpOnly(isHttpOnly);
    response.addCookie(cookie);
  }

  /**
   * 查询value
   *
   * @param request
   * @param key
   * @return
   */
  public static String getValue(HttpServletRequest request, String key) {
    Cookie cookie = get(request, key);
    if (cookie != null) {
      return cookie.getValue();
    }
    return null;
  }

  /**
   * 查询Cookie
   *
   * @param request
   * @param key
   */
  private static Cookie get(HttpServletRequest request, String key) {
    Cookie[] arr_cookie = request.getCookies();
    if (arr_cookie != null && arr_cookie.length > 0) {
      for (Cookie cookie : arr_cookie) {
        if (cookie.getName().equals(key)) {
          return cookie;
        }
      }
    }
    return null;
  }

  /**
   * 删除Cookie
   *
   * @param request
   * @param response
   * @param key
   */
  public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
    Cookie cookie = get(request, key);
    if (cookie != null) {
      set(response, key, "", null, COOKIE_PATH, 0, true);
    }
  }

}